////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2017-2018 Qualcomm Technologies, Inc.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: ParameterParser V1.1.4
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  modtrigladjv1.cpp
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "modtrigladjv1.h"
#include "parametersetmanager.h"

MODTRIGLADJV1_NAMESPACE_BEGIN

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Default Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixTriglAdjV1TypeClass::chromatixTriglAdjV1TypeClass(
    const CHAR* name)
    : ParameterModule(name, MAJOR, MINOR, PATCH, 0, 0, 0, 0)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(moduleID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(enableFlag);
    PARAMETER_INITIALIZE(triglDataCount);
    PARAMETER_INITIALIZE(triglDataID);
    PARAMETER_INITIALIZE(triglData);
    PARAMETER_INITIALIZE(vertexDataCount);
    PARAMETER_INITIALIZE(vertexDataID);
    PARAMETER_INITIALIZE(vertexData);
    PARAMETER_INITIALIZE(auxInfoData);
    PARAMETER_INITIALIZE(cctAdjGainData);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Constructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixTriglAdjV1TypeClass::chromatixTriglAdjV1TypeClass(
    const CHAR* name,
    UINT32 modeId,
    UINT16 mode,
    UINT16 subMode,
    UINT32 group)
    : ParameterModule(name, MAJOR, MINOR, PATCH, modeId, mode, subMode, group)
{
    PARAMETER_INITIALIZE(SymbolTableID);
    PARAMETER_INITIALIZE(moduleID);
    PARAMETER_INITIALIZE(module_version);
    PARAMETER_INITIALIZE(enableFlag);
    PARAMETER_INITIALIZE(triglData);
    PARAMETER_INITIALIZE(vertexData);
    PARAMETER_INITIALIZE(auxInfoData);
    PARAMETER_INITIALIZE(cctAdjGainData);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Destructor
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
chromatixTriglAdjV1TypeClass::~chromatixTriglAdjV1TypeClass()
{
    UnloadchromatixTriglAdjV1Type(this);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// GetName
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const CHAR* chromatixTriglAdjV1TypeClass::GetName(
    const CHAR* type)
{
    const CHAR* name = type;
    CHAR temp[ParameterFileSymbolTableEntry::TYPE_LEN + 1];
    if (PARAMETER_STRCMP(type, ParameterFileSymbolTableEntry::GetType(temp, "triglGAV1")) == 0)
    {
        name = "triglGAV1";
    }
    return name;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load modTriglAdjV1AuxInfoType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTriglAdjV1TypeClass::LoadmodTriglAdjV1AuxInfoType(
    ParameterFileSymbolTableEntry* entry,
    modTriglAdjV1AuxInfoType* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->numOfStartPosition);
    for (UINT32 i = 0; result && i < 4; i++)
    {
        result = result && entry->ReadInt32(&structure->startTriangleIdx[i]);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load modTriglAdjV1TriglInfoType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTriglAdjV1TypeClass::LoadmodTriglAdjV1TriglInfoType(
    ParameterFileSymbolTableEntry* entry,
    modTriglAdjV1TriglInfoType* structure)
{
    BOOL result = TRUE;
    for (UINT32 i = 0; result && i < 3; i++)
    {
        result = result && entry->ReadInt32(&structure->vertexIdx[i]);
    }
    for (UINT32 i = 0; result && i < 3; i++)
    {
        result = result && entry->ReadInt32(&structure->sideIdx[i]);
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load modTriglAdjV1TriglGainAdjType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTriglAdjV1TypeClass::LoadmodTriglAdjV1TriglGainAdjType(
    ParameterFileSymbolTableEntry* entry,
    modTriglAdjV1TriglGainAdjType* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);

    // Reading structure->triggerData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->triggerDataCount);
        structure->triggerDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->triggerData   = PARAMETER_NEW awbglobalelements::awbTriggerDataRGBType[structure->triggerDataCount];
        }
        if (!result || structure->triggerData == NULL)
        {
            structure->triggerDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->triggerDataCount; i++)
        {
            result = result && awbglobalelements::awbglobalelementsClass::LoadawbTriggerDataRGBType(pointerEntry1, &structure->triggerData[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load modTriglAdjV1TriglVertexInfoType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTriglAdjV1TypeClass::LoadmodTriglAdjV1TriglVertexInfoType(
    ParameterFileSymbolTableEntry* entry,
    modTriglAdjV1TriglVertexInfoType* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadawbPointDataType(entry, &structure->vertexPt);
    result = result && LoadmodTriglAdjV1TriglGainAdjType(entry, &structure->gainAdjData);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load modTriglAdjV1CCTAdjGainType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTriglAdjV1TypeClass::LoadmodTriglAdjV1CCTAdjGainType(
    ParameterFileSymbolTableEntry* entry,
    modTriglAdjV1CCTAdjGainType* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);

    // Reading structure->triggerData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->triggerDataCount);
        structure->triggerDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->triggerData   = PARAMETER_NEW awbglobalelements::awbTriggerDataRGBType[structure->triggerDataCount];
        }
        if (!result || structure->triggerData == NULL)
        {
            structure->triggerDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->triggerDataCount; i++)
        {
            result = result && awbglobalelements::awbglobalelementsClass::LoadawbTriggerDataRGBType(pointerEntry1, &structure->triggerData[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load chromatixTriglAdjV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTriglAdjV1TypeClass::LoadchromatixTriglAdjV1Type(
    ParameterFileSymbolTableEntry* entry,
    chromatixTriglAdjV1Type* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadmoduleIDType(entry, &structure->moduleID);
    result = result && Loadmodule_versionStruct(entry, &structure->module_version);
    result = result && entry->ReadInt32(&structure->enableFlag);

    // Reading structure->triglData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->triglDataCount);
        structure->triglDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->triglData   = PARAMETER_NEW modTriglAdjV1TriglInfoType[structure->triglDataCount];
        }
        if (!result || structure->triglData == NULL)
        {
            structure->triglDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->triglDataCount; i++)
        {
            result = result && LoadmodTriglAdjV1TriglInfoType(pointerEntry1, &structure->triglData[i]);
        }
    }

    // Reading structure->vertexData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->vertexDataCount);
        structure->vertexDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->vertexData   = PARAMETER_NEW modTriglAdjV1TriglVertexInfoType[structure->vertexDataCount];
        }
        if (!result || structure->vertexData == NULL)
        {
            structure->vertexDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->vertexDataCount; i++)
        {
            result = result && LoadmodTriglAdjV1TriglVertexInfoType(pointerEntry1, &structure->vertexData[i]);
        }
    }
    result = result && LoadmodTriglAdjV1AuxInfoType(entry, &structure->auxInfoData);
    result = result && LoadcctAdjGainDataStruct(entry, &structure->cctAdjGainData);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load module_versionStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTriglAdjV1TypeClass::Loadmodule_versionStruct(
    ParameterFileSymbolTableEntry* entry,
    chromatixTriglAdjV1Type::module_versionStruct* structure)
{
    BOOL result = TRUE;
    result = result && entry->ReadInt32(&structure->major_revision);
    result = result && entry->ReadInt32(&structure->minor_revision);
    result = result && entry->ReadInt32(&structure->incr_revision);

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Load cctAdjGainDataStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
BOOL chromatixTriglAdjV1TypeClass::LoadcctAdjGainDataStruct(
    ParameterFileSymbolTableEntry* entry,
    chromatixTriglAdjV1Type::cctAdjGainDataStruct* structure)
{
    BOOL result = TRUE;
    result = result && awbglobalelements::awbglobalelementsClass::LoadtriggerPointType(entry, &structure->triggerPt);

    // Reading structure->triggerData from the symbol table
    {
        result = result && entry->ReadUInt32(&structure->triggerDataCount);
        structure->triggerDataID = entry->ID;
        ParameterFileSymbolTableEntry* pointerEntry1 = entry->Table->ReadPointerEntry(entry);
        result = result && pointerEntry1 != NULL;
        if (result)
        {
            structure->triggerData   = PARAMETER_NEW modTriglAdjV1CCTAdjGainType[structure->triggerDataCount];
        }
        if (!result || structure->triggerData == NULL)
        {
            structure->triggerDataCount = 0;
        }
        for (UINT32 i = 0; result && i < structure->triggerDataCount; i++)
        {
            result = result && LoadmodTriglAdjV1CCTAdjGainType(pointerEntry1, &structure->triggerData[i]);
        }
    }

    return result;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload modTriglAdjV1TriglGainAdjType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTriglAdjV1TypeClass::UnloadmodTriglAdjV1TriglGainAdjType(
    modTriglAdjV1TriglGainAdjType* structure)
{
    PARAMETER_DELETE[] structure->triggerData;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload modTriglAdjV1TriglVertexInfoType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTriglAdjV1TypeClass::UnloadmodTriglAdjV1TriglVertexInfoType(
    modTriglAdjV1TriglVertexInfoType* structure)
{
    UnloadmodTriglAdjV1TriglGainAdjType(&structure->gainAdjData);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload modTriglAdjV1CCTAdjGainType
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTriglAdjV1TypeClass::UnloadmodTriglAdjV1CCTAdjGainType(
    modTriglAdjV1CCTAdjGainType* structure)
{
    PARAMETER_DELETE[] structure->triggerData;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload chromatixTriglAdjV1Type
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTriglAdjV1TypeClass::UnloadchromatixTriglAdjV1Type(
    chromatixTriglAdjV1Type* structure)
{
    PARAMETER_DELETE[] structure->triglData;
    for (UINT32 i = 0; i < structure->vertexDataCount; i++)
    {
        UnloadmodTriglAdjV1TriglVertexInfoType(&structure->vertexData[i]);
    }
    PARAMETER_DELETE[] structure->vertexData;
    UnloadcctAdjGainDataStruct(&structure->cctAdjGainData);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Unload cctAdjGainDataStruct
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void chromatixTriglAdjV1TypeClass::UnloadcctAdjGainDataStruct(
    chromatixTriglAdjV1Type::cctAdjGainDataStruct* structure)
{
    for (UINT32 i = 0; i < structure->triggerDataCount; i++)
    {
        UnloadmodTriglAdjV1CCTAdjGainType(&structure->triggerData[i]);
    }
    PARAMETER_DELETE[] structure->triggerData;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// Parse symbol table entry, and return a new object
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
ParameterModule* chromatixTriglAdjV1TypeClass::Parse(
    ParameterSetManager* manager,
    ParameterFileSymbolTableEntry* entry) const
{
    chromatixTriglAdjV1TypeClass* cls = NULL;

    if (PARAMETER_STRCMP(Type, entry->Type) == 0 && Major == entry->Major &&
        Minor == entry->Minor && Patch == entry->Patch)
    {
        cls = PARAMETER_NEW chromatixTriglAdjV1TypeClass(GetName(entry->Type), 
            entry->ModeId, entry->Mode, entry->SubMode, entry->Group);
        if (cls != NULL)
        {
            BOOL result = TRUE;

            cls->SymbolTableID = entry->ID;
            cls->ID            = entry->ID;

            result = result && LoadchromatixTriglAdjV1Type(entry, cls);

            if (!result)
            {
                PARAMETER_DELETE cls;
                cls = NULL;
            }
        }
    }
    return (ParameterModule*)cls;
}


MODTRIGLADJV1_NAMESPACE_END
